/**
* @desc 
* 
* @version 0.9
* @author james // queen-site
*/
class Mailer{
	/** @var style A változó tartalmazza az emailhez használt stíluslap elérési útját (relatív, pl: Static/Email/Style.css) */
	public $style;
	/** @var cimzett A változóba kerül a címzett email címe */
	public $cimzett;
	/** @var felado_nev Ide kerül a feladó neve, alapesetben a define-olt RENDSZER_EMAIL_NEV-et használja */
	public $felado_nev;
	/** @var felado_email Ide kerül a feladó címe, alapesetben a define-olt RENDSZER_EMAIL_CIM-et használja */
	public $felado_email;	
	/** @var subject A kiküldendő email tárgya */
	public $subject;
	/** @var uzenet A kiküldendő mail szövege */
	public $uzenet;
	/** @var attached_images Tömb, ez tartalmazza a kiküldendő emailhez csatolt képeket */
	public $attached_images;
	/** @var boundary */
	private $boundary;
	/** @var header */
	private $header;
	/** @var tmp */
	private $tmp;
	/** @var email_id A változó tartalmazza a kiküldendő email id-jét, a trace-eléshez elengedhetetlen! */
	private $email_id;
	/** @var mail_cache Ha a változó true (alapértelmezés), akkor létezik mail cache, eltárolja a kiküldött maileket ! */
	public $mail_cache;
	/** @var mail_store Ha a változó true (alapértelmezés), akkor létezik mail cache, eltárolja a kiküldött maileket ! */
	public $mail_trace;
	/** @var success A változó tartalmazza a send() függyvény hívása után a sikeresen elküldött emaileket */
	public $success;
	/** @var fail A változó tartalmazza a send() függyvény hívása után a sikertelen emaileket */
	public $fail;
	/**
	* @desc 
	* 
	* @param string $subject Ez tartalmazza az üzenet címét. Ha indításkor nincs megadva, akkor később kell megadni $mailer->subject módon
	* @param string $uzenet Ez tartalmazza az üzenetet. Ha indításkor nincs megadva, akkor később kell megadni $mailer->uzenet módon
	* @param string $style Ez tartalmazza az üzenet stílusát. Ha indításkor nincs megadva, akkor később kell megadni $mailer->style módon
	*/
	function __construct($subject = '', $uzenet = '', $style = '' ){
		if($subject != ''){
			$this->subject = $subject;
		}
		if($uzenet != ''){
			$this->uzenet = $uzenet;
		}
		if($style != ''){
			$this->style = $style;
		}		
		
		$this->mail_cache = false;				
		$this->mail_trace = false;				
		$this->felado_nev = RENDSZER_EMAIL_NEV;
		$this->felado_email = RENDSZER_EMAIL_CIM;
		
		$this->boundary(5);
	}
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function boundary($number = ''){
		$this->tmp = explode("@", $this->felado_email);
		$this->boundary = $this->tmp[0]."-".md5(time());
		$this->boundary2 = $this->tmp[0]."-".md5(time());
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/	
	public function message_processor(){
		$this->subject = "=?UTF-8?B?".base64_encode($this->subject)."?=";
		$this->head();		
		if(count($this->personal_elements)){
			foreach($this->personal_elements AS $index => $element){
				$this->personal_elements[$index] = '['.$element.']';
			}
		}
		$this->uzenet = str_replace($this->personal_elements, $this->personal_array, $this->uzenet);
		if(count($this->attached_images)){
			foreach($this->attached_images AS $index => $image){
				$this->uzenet = str_replace($image, 'cid:image'.$index, $this->uzenet);
			}
		}
	}
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function send($cimzett = ''){
		if($this->mail_trace == true){
			$this->store_mail();
			$this->trace();
			//$this->message = str_replace('{trace_track}', ' email_id.'\" alt=\"\"	width=\"1\" height=\"1\"  />', $this->message);
		}
		/*
         mail("kruskaroland@gmail.com", 
          "TESZT", 
          "TESZT", 
          "From: SMTP <".$this->felado_email.">" ."\r\n".
          "CC: Teszt " ."\r\n".
          "BCC: Teszt2 " ."\r\n".
          "Reply-To: Teszt3 " ."\r\n"
       );*/
			if( mail($this->cimzett, $this->subject, $this->message,"From: ".$this->felado_nev." <".$this->felado_email.">"."\r\n". $this->header) ) {
				$this->success++;			
			}
			else {
				$this->fail++;
			}
		
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function store_mail(){
		unset($this->email_id);
		
		$db = new Dbase('insert', 'email_cache');
		$db->elemek = array(
			'cimzett' => $this->cimzett,
			'subject' => $this->subject,
			'message' => $this->message,
		);
		$db->sql();
		
		$this->email_id = $db->id;
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function trace(){				
		$db = new Dbase('insert', 'email_statusz');
		$db->elemek = array('email_id' => $this->email_id);		
		$db->sql();		
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function header(){
	   if(!$this->reply_email){
	       $this->reply_email = $this->felado_email;
	   }
		$this->header =
"From: \"=?UTF-8?B?".base64_encode($this->felado_nev)."?=\" <".$this->felado_email.">
Date: ".date('r')."
Reply-To: ".$this->reply_email."
Message-ID: <".$this->boundary."_".$this->felado_email.">
MIME-Version: 1.0
Content-Type: multipart/related; boundary=\"==".$this->boundary."\"
This is a MIME message. If you are reading this text, you
might want to consider changing to a mail reader that
understands how to properly display MIME multipart messages.
--==".$this->boundary."
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
";
	}
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function body(){}
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function head(){
	    if($this->style){
		  $style = file_get_contents($this->style);
		}
		$this->head = '
		
			'.$this->subject.'
			
			
		';
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function message(){
	   global $host_name;
       if($this->sablon == "yes"){
		$this->message .= 
"
	".$this->head."
email_id.'\" alt=\"\"	width=\"1\" height=\"1\"  />', $this->message);
		}
		/*
         mail("kruskaroland@gmail.com", 
          "TESZT", 
          "TESZT", 
          "From: SMTP <".$this->felado_email.">" ."\r\n".
          "CC: Teszt " ."\r\n".
          "BCC: Teszt2 " ."\r\n".
          "Reply-To: Teszt3 " ."\r\n"
       );*/
			if( mail($this->cimzett, $this->subject, $this->message,"From: ".$this->felado_nev." <".$this->felado_email.">"."\r\n". $this->header) ) {
				$this->success++;			
			}
			else {
				$this->fail++;
			}
		
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function store_mail(){
		unset($this->email_id);
		
		$db = new Dbase('insert', 'email_cache');
		$db->elemek = array(
			'cimzett' => $this->cimzett,
			'subject' => $this->subject,
			'message' => $this->message,
		);
		$db->sql();
		
		$this->email_id = $db->id;
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function trace(){				
		$db = new Dbase('insert', 'email_statusz');
		$db->elemek = array('email_id' => $this->email_id);		
		$db->sql();		
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function header(){
	   if(!$this->reply_email){
	       $this->reply_email = $this->felado_email;
	   }
		$this->header =
"From: \"=?UTF-8?B?".base64_encode($this->felado_nev)."?=\" <".$this->felado_email.">
Date: ".date('r')."
Reply-To: ".$this->reply_email."
Message-ID: <".$this->boundary."_".$this->felado_email.">
MIME-Version: 1.0
Content-Type: multipart/related; boundary=\"==".$this->boundary."\"
This is a MIME message. If you are reading this text, you
might want to consider changing to a mail reader that
understands how to properly display MIME multipart messages.
--==".$this->boundary."
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
";
	}
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function body(){}
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	private function head(){
	    if($this->style){
		  $style = file_get_contents($this->style);
		}
		$this->head = '
		
			'.$this->subject.'
			
			
		';
	}
	
	/**
	* @desc 
	* @version
	* @author james // queensite
	*/
	public function message(){
	   global $host_name;
       if($this->sablon == "yes"){
		$this->message .= 
"
	".$this->head."
	
		
            
				|  | 
			
				| ".$this->uzenet." | 
            
				|  | 
		
	
\r\n";
}else{
    	$this->message .= 
"
	".$this->head."
	
	".$this->uzenet."
	
\r\n";
}
	if(count($this->attached_images)){
		foreach ($this->attached_images AS $index => $image){
			$filename = explode ("/",$image);
			$filename = $filename[count($filename)-1];
			$data = chunk_split(base64_encode(file_get_contents($image)));			
			
			$this->message .=
'
--=='.$this->boundary.'
Content-Type: image/jpeg
Content-ID: 
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="'.$filename.'"
'.$data;
		}
	}
		/**
		* @desc html rész
		*/
		$html_message = explode('.', strip_tags($this->uzenet));
		$html_message = implode('.\r\n', $html_message);
		
		$this->message .= '
--=='.$this->boundary.'--
';
	}
}
?>